
// 数据库的操作方法

// 第一步，必须获取 getAccessToken （简称Token）的地址 才有权限对小程序云开发数据库操作（增删改查）
const axios = require('axios') // 引入Ajax，进行请求
const qs = require('querystring') // 用来拼接字符串，拼接token地址
const result = require('./yichang-results')// 处理异常的中间件
const qiao = require('qiao-weixin') // 获取小程序码
// const qiaoExtWeixin = require('qiao.ext.weixin');
// var Blob = require('blob');
// var buffer = require('buffer/').Buffer  // note: the trailing slash is important
// const { encode } = require('punycode')
// 字符串拼接方法
let tokenurl = qs.stringify({
    grant_type: 'client_credential', // 官方默认
    appid: 'wx8cd95db9c7b96512', // 小程序唯一凭证，即 AppID
    secret: '60adf58572c205f660e42fde201149bc' // AppSecret(小程序密钥)	
})
let url = 'https://api.weixin.qq.com/cgi-bin/token?' + tokenurl  // 取小程序全局唯一后台接口调用接口
let env = 'cloud1-6g19om8258ff8b8e' // 微信小程序的数据库云环境id cloud1-6g19om8258ff8b8e

// const deleteurl = 'https://api.weixin.qq.com/tcb/databasedelete?access_token='  // 数据库删除记录链接
const addurl = 'https://api.weixin.qq.com/tcb/databaseadd?access_token='  // 数据库插入记录链接
const chaxun_refer = 'https://api.weixin.qq.com/tcb/databasequery?access_token=' // 数据库查询记录链接
const Updateurl = 'https://api.weixin.qq.com/tcb/databaseupdate?access_token=' // 数据库更新记录链接
const Subscribe = 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=' // 订阅消息查询
const program = 'https://api.weixin.qq.com/wxa/getwxacode?access_token=' // 生成小程序二维码链接  少数的码

class getToken {
    constructor() { }
    // 取小程序全局唯一后台接口调用凭据，token有效期为7200s，（没有他数据库的增删改查无用）
    async get_token() {
        try {
            let token = await axios.get(url)
            if (token.status == 200) {
                return token.data.access_token
            } else {
                throw '获取token值失败'// 出现错误throw会进入catch里面
            }
        } catch (err) {
            throw new result(err, 500)
        }
    }
    


    // 调用微信小程序的数据库api 地址 查询 
    async database(address, query) {
        try {
            let token = await this.get_token() // 调用数据库的token，生成新的
            let data = await axios.post(address + token, { env, query }) // 请求数据库增删改查的请求链接（公用的）
            if (data.data.errcode == 0) { // 判断返回结果给前端
                return data.data
            } else {
                throw '数据库请求失败，服务器发生错误'
            }
        } catch (error) {
            throw new result(error, 500) // 返回前端显示
        }
    }

    // 订阅消息
    async subscribe(touser, data) {
        console.log(touser,data,'touserdata');
        try {
            let token = await this.get_token()
            let OBJ = {
                touser, data, template_id: 'EEFKNccJ6PGDVx8fa7Nu7YUVj1MoxmybLP0qJ5ZwOXA',  // 订阅id
                "page": 'pages/home-page/page',  // 跳转链接页面 不要在前面加 /
                "miniprogram_state": 'developer',
                "lang":"zh_CN",
            }   // 跳转小程序类型：developer为开发版；trial为体验版；formal为正式版；默认为正式版
            let colldata = await axios.post(Subscribe + token, OBJ)
            console.log(colldata,'colldata');
            return 'true'
        } catch (err) {
            console.log(err,'err');
            throw new result(e, 500)
        }
    }

	// 生成小程序码
	async qrcode(number){
		let token = await this.get_token()
		let OBJ = JSON.stringify({path:'pages/index/index?number=' + number})
		try{
            // responseType:'arraybuffer' 二进制图片数据
			let colldata = await axios.post(program + token,OBJ,{responseType:'arraybuffer'})
			return colldata
		}catch(e){
			throw new result(e,500)
		}
	}







}

module.exports = { getToken, addurl, chaxun_refer, Updateurl }
